/*
* Copyright 2011 Pavel Kozhin 
*
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed  under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License.
*
* Author: Pavel Kozhin.
*/
package org.etherframework.core.bridge
{
	import org.etherframework.IEther;
	import org.etherframework.common.command.facade.ICommandsFacade;
	import org.etherframework.common.dependency.facade.IDependenciesFacade;
	import org.etherframework.common.mediation.facade.IMediationsFacade;
	import org.etherframework.common.mediators.facade.IMediatorsFacade;
	import org.etherframework.common.wire.IMetaProcessor;
	import org.etherframework.common.wire.IWirable;
	import org.etherframework.common.wire.IWire;
	import org.etherframework.core.context.Context;
	import org.etherframework.core.context.IContexts;
	import org.etherframework.core.context.IContextual;
	import org.etherframework.core.manager.DestructionManager;
	import org.etherframework.core.utils.Dispatcher;

	//[ExcludeClass]
	
	public interface IBridgeFacades extends IContextual
	{
		// TODO: Think to remove it.
		function getWire(target:Object):IWire;
		
		function createProcessor(metatag:String):IMetaProcessor;
		
		function wire(target:IWirable, ether:IEther):IWire;
		
		function unwire(target:IWirable):IWire;
		
		function contextual(context:Context):IBridgeFacades;
		
		function get dependencies():IDependenciesFacade;
		function get mediators():IMediatorsFacade;
		function get commands():ICommandsFacade;
		function get mediations():IMediationsFacade;
		
		function get destructionManager():DestructionManager;
		function get dispatcher():Dispatcher;
		function get controllers():Controllers;
		function get contexts():IContexts;
		function get access():String;
		function get domain():String;
		function get parent():IBridgeFacades;
	}
}